package org.origin.centre.support.base.interfaces;

/**
 * 枚举接口
 *
 * @author ferret
 * @version 2024-05-08
 */
@SuppressWarnings("unused")
public interface XEnum<T> {

    /**
     * 获取枚举代码
     *
     * @return 枚举代码
     */
    T getCode();

    /**
     * 获取名称，默认返回 null
     *
     * @return 名称
     */
    default String getName() {
        return null;
    }

    /**
     * 获取标题
     *
     * @return 标题
     */
    String getTitle();

    /**
     * 判断当前枚举是否与另一个枚举相等
     *
     * @param other 另一个枚举
     * @return 如果相等则返回 true，否则返回 false
     */
    default boolean isEqual(XEnum<T> other) {
        return null!=other && other.getCode().equals(this.getCode());
    }

    /**
     * 判断当前枚举的代码是否与给定的代码相等
     *
     * @param code 给定的代码
     * @return 如果相等则返回 true，否则返回 false
     */
    default boolean isEqual(T code) {
        return code != null && this.getCode().equals(code);
    }

//    default XEnum<T>[] getConstants() {
//        Enum<?> enumThat = (Enum<?>) this;
//        return (XEnum<T>[]) enumThat.getClass().getEnumConstants();
//    }
//
//    default Map<String, XEnum<T>> getEnumMap() {
//        Map<String, XEnum<T>> result = new HashMap<>();
//        XEnum<T>[] constants = getConstants();
//        for (XEnum<T> constant : constants) {
//            if (constant.getCode() != null) {
//                result.put(constant.getCode().toString(), constant);
//            }
//        }
//        return result;
//    }
//
//    default Map<String, String> getTitleMap() {
//        Map<String, String> result = new HashMap<>();
//        XEnum<T>[] constants = getConstants();
//        for (XEnum<T> constant : constants) {
//            if (constant.getCode() != null) {
//                result.put(constant.getCode().toString(), constant.getTitle());
//            }
//        }
//        return result;
//    }
}
